#pragma once

// GLEW
#define GLEW_STATIC
#include <GL\glew.h>

// GLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

class Camera
{
public:
	enum Behavior {
		FORWARD,
		BACKWARD,
		LEFT,
		RIGHT,
	};

public:
	Camera(glm::vec3& pos);
	~Camera();

	glm::mat4 GetViewMatrix();
	void ProcessKeyboard(Behavior behavior, double deltaTime);
	void ProcessMouseMovement(double xoffset, double yoffset);
	void ProcessMouseScroll(double yoffset);

public:
	glm::vec3 position;
	glm::vec3 up;
	glm::vec3 direction;

	GLfloat yaw;	// degree
	GLfloat pitch;	// degree
	GLfloat zoom;	// degree
};

#include "Camera.cpp"
